import 'dart:convert';

import 'package:get/get.dart';

class BaseResponse<T> {
  final int code;
  final String message;
  final T? data;
  final bool success;

  final List? res;

  BaseResponse( {
    required this.code,
    required this.message,
    this.data,
    required this.success,
    this.res,
  });

  factory BaseResponse.fromJson(
      Map<String, dynamic> json, T Function(dynamic)? fromJsonT) {
    return BaseResponse<T>(
      res: json['res'] ?? null,
      code: json['code'] ?? -1,
      message: json['message'] ?? 'unknown_error'.tr,
      data: _parseData(json['data'], fromJsonT),
      success: (json['code'] ?? -1) == 200,
    );
  }

  static T? _parseData<T>(dynamic data, T Function(dynamic)? fromJsonT) {
    if (data == null || fromJsonT == null) {
      return data;
    }
    // print('解析数据: $data');
    try {
      // 如果 data 是字符串，尝试解析为 JSON
      if (data is String) {
        if (data.isEmpty || data.trim().isEmpty) {
          return null;
        }

        // 尝试解析 JSON 字符串
        try {
          final jsonData = jsonDecode(data);
          return fromJsonT(jsonData);
        } catch (e) {
          print('JSON 解析失败: $e, 原始数据: $data');
          return null;
        }
      }

      // 如果 data 已经是 Map，直接使用
      if (data is Map<String, dynamic>) {
        return fromJsonT(data);
      }

      // 其他情况直接返回
      return fromJsonT(data);
    } catch (e) {
      print('数据解析错误: $e');
      return null;
    }
  }

  // 添加便捷方法
  bool get isSuccess => success && code == 200;
  bool get hasData => data != null;
}
